Emulation refers to the ability of a program or device to imitate another program or device. A software emulator allows computer programs to run on a platform (i.e., computer architecture and/or operating system) other than the platform for which the programs were originally written. Emulation attempts to model the state of the device being emulated, as well as reproduce the program's behavior in the emulated device. Emulation software may be packaged for use by computer users, programmers, and manufacturers.
Two common types of emulation are central processing unit (CPU) emulation and operating system (OS) emulation. CPU engineers choose the instruction set that is executed by a given CPU. As a result, a line of CPUs use an instruction set that is generally incompatible with instruction sets used by another line of CPUs. For example, IBM-compatible computers tend to use Intel 80x86-compatible CPUs, such as Intel Pentium™ (Pentium™ is a registered trademark of Intel Corporation) and AMD Athlon™ (Athlon™ is a registered trademark of Advanced Micro Devices, Inc.) CPUs, whereas Macintosh computers originally used Motorola 680x0 CPUs. (Macintosh™ is a registered trademark of Apple Computer, Inc.) CPU emulation software allows a CPU to execute an instruction set that is typically incompatible with that CPU.
Operating Systems (OSes) are collections of instructions that provide a set of routines to the programs running on a computer. OS routines are generally grouped into layers; the lowest layers interact directly with hardware and the higher layers interact with lower layers. OS emulation software allows a computer to provide routines that are not normally provided by the OS installed on the computer. For example, OS emulation software may allow functions from one OS to run on a second OS, even if the second OS does not normally support these functions. OS emulation may also replace some or all of the layers of a given OS.